\chapter{简介}
Tenon语言是一门专用于机械臂程序开发的结构化程序设计语言，具有跨平台、可扩展、支持错误处理、支持中断等特性。
它包括独立的语言核心部分，以及机械臂相关的扩展部分。
本文档只涉及其语言核心的部分，一步步引导读者对Tenon语言进行了解。


\section{语言特点}
Tenon语言是以传统的机械臂程序开发语言为范本，参考了诸多现代语言而产生的。
Tenon语言有以下主要特点：

\begin{itemize}

\item {} 
语言更加简洁、更加准确。Tenon使用了更少的关键字；Tenon大小写敏感，更符合现代编程习惯。

\item {} 
跨平台运行。Tenon程序的编译产物，可以被不同平台上的Tenon执行器直接运行。

\item {} 
语言具有扩展性。Tenon支持通过C/C++语言进行功能扩展，以提高性能或访问系统资源。

\end{itemize}

\section{运行Tenon程序}

Tenon语言的工具包中包含了tenon命令，可以用于执行单个或多个文件的Tenon程序。
Tenon程序以.t为后缀。例如：

\begin{lstlisting}[numbers=none]
tenon prog.t
tenon prog1.t prog2.t
\end{lstlisting}

分别演示了使用tenon命令运行包含单个文件prog.t的程序，及包含两个文件prog1.t和prog2.t的程序。

\section{编写简单的Tenon程序}

将下页的代码复制到一个文本文件中并保存（注意去掉每行的行号），并将文件名重命名为hello.t。
在命令行中，使用tenon命令执行该程序：

\begin{lstlisting}[numbers=none]
tenon hello.t
\end{lstlisting}

可以看到程序产生了输出：

\begin{lstlisting}[numbers=none]
Hello World!
\end{lstlisting}

\noindent \textbf{例1-1 输出Hello World!}

\begin{lstlisting}
// This is a simple Tenon program.

module hello {
   void main() {
       print("Hello World!");
   }
}
\end{lstlisting}



下面我们对这段程序进行详细的解释。

\subsection{注释}

程序的第1行是一段注释，Tenon编译器会跳过对注释的处理，实际上并不会执行。
注释的作用是向阅读者解释程序的功能，提高程序的可读性。
Tenon中的注释以//开头，直到一行结束。如果有多行注释，则每行的开头都需要以//开头。

\subsection{空行}

程序的第2行是一个空行。同样的，Tenon编译器会跳过对空行的处理。
空行的作用是用于分割程序中不同功能的代码块，提高程序的可读性。

\subsection{模块声明}

从程序的第3行直到程序的结尾，是Tenon模块的声明部分。
一个Tenon可执行程序由一个或多个模块组成，每个模块都需要在一个文件中单独保存。
模块的声明以关键字module开头，后跟模块的名称以及模块的模块体。模块体以\{开始，以\}结束。

\subsection{标识符}

标识符是程序中用来命名模块、类型、函数、变量、常量等的名称。
标识符由字母、数字和下划线组成，其中起始字符必须是字母或者下划线。
Tenon语言是大小写敏感的，因此，hello和Hello是不同的标识符。
Tenon语言中的关键字，例如module，不能用于标识符。Tenon中的关键字还包括：

\begin{lstlisting}[numbers=none]
alias anytype backward bool break case const default else
enum error false for if local module num opaque pers
record return shared string switch true undo void while
\end{lstlisting}

\subsection{函数}

程序的第4行到第6行，是Tenon函数的声明部分，Tenon模块中可以包含0个或多个函数。
函数的声明包括函数的返回值类型、函数名称、函数的参数列表以及函数的函数体。函数的函数体以\{开始，以\}结束。
每个Tenon可执行程序都必须包含一个名为main的函数，称为程序的入口函数。

\subsection{语句}

程序的第5行，是一条Tenon语句，Tenon函数中可以包含0条或多条语句，Tenon语句是实际上被执行的代码。
一条语句一般占据单独的一行，并以;作为结尾。

代码中的语句是函数调用语句，调用了print函数向显示终端打印Hello World!字符串。

\section{练习}

\subsection{编写Tenon程序，尝试输出其它的字符串}
